/**
 * Copyright (C) 2018-2022
 * All rights reserved, Designed By www.yixiang.co
 * 注意：
 * 本软件为www.yixiang.co开发研制
 */
package co.yixiang.modules.order.order.entity.dto;

import co.yixiang.modules.member.entity.dto.YxUserDto;
import co.yixiang.modules.order.cart.entity.enums.DeliveryMethodEnum;
import co.yixiang.modules.order.order.entity.domain.OrderItem;
import co.yixiang.modules.order.order.entity.enums.OrderStatusEnum;
import co.yixiang.modules.order.order.entity.enums.OrderTypeEnum;
import co.yixiang.modules.order.order.entity.enums.PayStatusEnum;
import co.yixiang.modules.order.order.entity.vo.OrderItemVO;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author hupeng
 * @date 2020-05-12
 */
@Data
public class YxStoreOrderDto implements Serializable {

    /** 订单ID */
    private Long id;
    /** 订单号 */
    private String sn;
    /** 额外订单号 */
    private String extendOrderId;
    @ApiModelProperty("交易编号 关联Trade")
    private String tradeSn;
    @ApiModelProperty(value = "第三方付款流水号")
    private String receivableNo;
    /** 用户id */
    private String uid;
    /** 用户姓名 */
    private String realName;
    /** 用户信息 */
    private YxUserDto userDTO;

    /** 订单状态（-1 : 申请退款 -2 : 退货成功 0：待发货；1：待收货；2：已收货；3：待评价；-1：已退款） */
    private Integer status;
    /**
     * @see OrderStatusEnum
     */
    @ApiModelProperty(value = "订单状态")
    private String orderStatus;
    /** 支付状态 */
    // private Integer paid;
    /**
     *  @see PayStatusEnum
     */
    @ApiModelProperty(value = "付款状态")
    private String payStatus;

    /**
     *  PaymentMethodEnum
     */
    @ApiModelProperty(value = "支付方式")
    private String paymentMethod;
    @ApiModelProperty(value = "支付时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date paymentTime;

    @ApiModelProperty(value = "收件人姓名")
    private String consigneeName;
    @ApiModelProperty(value = "收件人手机")
    private String consigneeMobile;
    /** 省份/市/区 */
    @NotBlank(message = "收件人地址不能为空")
    private String consigneeAddress;
    /** 详细地址 */
    @NotEmpty(message = "收件人详细地址不能为空")
    private String consigneeDetail;
    /** 详细地址 */
    @NotEmpty(message = "收件人地址经纬度")
    private String consigneeAddressIdPath;

    /**
     * @see  DeliveryMethodEnum
     */
    @ApiModelProperty(value = "配送方式")
    private String deliveryMethod;

    /** 配送方式 1=快递 ，2=门店自提 */
    private Integer shippingType;


    @ApiModelProperty(value = "货运状态")
    private String deliverStatus;
    @ApiModelProperty(value = "运费")
    private Double freightPrice;
    /** 送货人姓名 */
    // private String deliveryName;
    /** 送货人手机号 */
    // private String deliveryPhone;
    /** 发货类型 */
    private String deliveryType;
    @ApiModelProperty(value = "发货单号")
    private String logisticsNo;
    @ApiModelProperty(value = "物流公司CODE")
    private String logisticsCode;
    @ApiModelProperty(value = "物流公司名称")
    private String logisticsName;
    @ApiModelProperty(value = "送货时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date logisticsTime;
    @ApiModelProperty(value = "订单商品总重量")
    private Double weight;
    /** 买家备注 */
    private String mark;
    @ApiModelProperty(value = "订单是否支持原路退回")
    private Boolean canReturn;

    /** 购物车id */
    private String cartId;
    /** 订单商品总数 */
    private Integer totalNum;
    /** 订单总价 */
    private BigDecimal totalPrice;
    @ApiModelProperty(value = "修改价格")
    private BigDecimal updatePrice;
    /** 实际支付金额 */
    private BigDecimal payPrice;
    /** 抵扣金额 优惠的金额 */
    private BigDecimal discountPrice;
    /** 优惠券id */
    private Integer couponId;
    /** 优惠券金额 */
    private BigDecimal couponPrice;
    /** 订单取消原因 */
    private String cancelReason;
    @ApiModelProperty(value = "完成时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date completeTime;
    /** 0 未退款 1 申请中 2 已退款 */
    private Integer refundStatus;
    /** 退款图片 */
    private String refundReasonWapImg;
    /** 退款用户说明 */
    private String refundReasonWapExplain;
    /** 退款时间 */
    private Date refundReasonTime;
    /** 前台退款原因 */
    private String refundReasonWap;
    /** 不退款的理由 */
    private String refundReason;
    /** 退款金额 */
    private BigDecimal refundPrice;
    /** 消费赠送多少积分 */
    private BigDecimal gainIntegral;


    @ApiModelProperty(value = "是否为某订单类型的订单，如果是则为订单类型的id，否则为空")
    private String promotionId;
    /**
     * @see OrderTypeEnum
     */
    @ApiModelProperty(value = "订单类型")
    private String orderType;

    /** 唯一id(md5加密)类似id */
    //@NotBlank
    private String unique;
    /** 管理员备注 */
    private String remark;
    /** 使用积分 */
    private BigDecimal useIntegral;
    /** 给用户退了多少积分 */
    private BigDecimal backIntegral;
    /** 拼团产品id0一般产品 */
    private Long combinationId;
    /** 拼团id 0没有拼团 */
    private Long pinkId;
    /** 秒杀产品ID */
    private Long seckillId;
    /** 砍价id */
    private Long bargainId;
    /** 核销码 */
    private String verifyCode;
    /** 门店id */
    private Integer storeId;
    private String storeName;

    //支付类型
    private String payTypeName;
    //状态名称
    private String statusName;
    private Integer _status;
    //订单类型
    private String pinkName;
    // 创建时间
    private Date createTime;
    // 商品信息
    private List<OrderItemVO> orderItemList;


}
